home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1997 December / PC Pro December 1997 CD-Rom coverdisc.iso / symantec / dbAnywh / JAVA.BIN / CLASSES.ZIP / sun / tools / javadoc / Main.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-14  |  7.5 KB  |  278 lines

  1. package sun.tools.javadoc;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.util.Enumeration;
  6. import java.util.Hashtable;
  7. import java.util.Vector;
  8. import sun.tools.java.ClassDeclaration;
  9. import sun.tools.java.ClassDefinition;
  10. import sun.tools.java.ClassFile;
  11. import sun.tools.java.ClassPath;
  12. import sun.tools.java.Constants;
  13. import sun.tools.java.FieldDefinition;
  14. import sun.tools.java.Identifier;
  15. import sun.tools.java.Package;
  16. import sun.tools.javac.BatchEnvironment;
  17. import sun.tools.javac.SourceClass;
  18. import sun.tools.tree.Node;
  19.  
  20. public final class Main implements Constants {
  21.    public static final String program = "javadoc";
  22.    public static BatchEnvironment env;
  23.    public static File destDir;
  24.    public static DocumentationGenerator generator;
  25.    public static boolean showAuthors;
  26.    public static boolean showVersion;
  27.    public static boolean showIndex = true;
  28.    public static boolean showTree = true;
  29.  
  30.    static void error(String var0) {
  31.       System.out.println("javadoc: " + var0);
  32.       if (env != null) {
  33.          ++env.nerrors;
  34.       }
  35.  
  36.    }
  37.  
  38.    static void exit() {
  39.       byte var0 = 0;
  40.       if (env == null) {
  41.          var0 = 1;
  42.       } else {
  43.          env.flushErrors();
  44.          if (env.nerrors > 0) {
  45.             System.out.print(env.nerrors);
  46.             if (env.nerrors > 1) {
  47.                System.out.print(" errors");
  48.             } else {
  49.                System.out.print(" error");
  50.             }
  51.  
  52.             if (env.nwarnings > 0) {
  53.                System.out.print(", " + env.nwarnings);
  54.                if (env.nwarnings > 1) {
  55.                   System.out.print(" warnings");
  56.                } else {
  57.                   System.out.print(" warning");
  58.                }
  59.             }
  60.  
  61.             System.out.println();
  62.             var0 = 1;
  63.          } else if (env.nwarnings > 0) {
  64.             System.out.print(env.nwarnings);
  65.             if (env.nwarnings > 1) {
  66.                System.out.println(" warnings");
  67.             } else {
  68.                System.out.println(" warning");
  69.             }
  70.          }
  71.       }
  72.  
  73.       System.exit(var0);
  74.    }
  75.  
  76.    static void usage() {
  77.       System.out.println("use: javadoc [flags]* [class | package]*");
  78.       System.out.println("\t-version        Include the version field");
  79.       System.out.println("\t-author         Include the author field");
  80.       System.out.println("\t-sourcepath <directories separated by colons>");
  81.       System.out.println("\t                Directories to find class source");
  82.       System.out.println("\t-classpath <directories separated by colons>");
  83.       System.out.println("\t                Synonym for -sourcepath");
  84.       System.out.println("\t-doctype <type> Documentation type to generate");
  85.       System.out.println("\t                <type>=html or mif.  html default");
  86.       System.out.println("\t-noindex        Do not generate index of all methods and fields");
  87.       System.out.println("\t-notree         Do not generate class hierarchy");
  88.    }
  89.  
  90.    public static void main(String[] var0) {
  91.       String var1 = System.getProperty("java.class.path");
  92.       int var2 = 4;
  93.       long var3 = System.currentTimeMillis();
  94.       Vector var5 = new Vector();
  95.       Vector var6 = new Vector();
  96.       String var7 = "HTML";
  97.  
  98.       for(int var8 = 0; var8 < var0.length; ++var8) {
  99.          if (var0[var8].equals("-verbose")) {
  100.             var2 |= 1;
  101.          } else if (var0[var8].equals("-version")) {
  102.             showVersion = true;
  103.          } else if (!var0[var8].equals("-author") && !var0[var8].equals("-authors")) {
  104.             if (!var0[var8].equals("-sourcepath") && !var0[var8].equals("-classpath")) {
  105.                if (var0[var8].equals("-doctype")) {
  106.                   if (var8 + 1 < var0.length) {
  107.                      ++var8;
  108.                      var7 = var0[var8];
  109.                   } else {
  110.                      error("-docType requires argument");
  111.                      usage();
  112.                      exit();
  113.                   }
  114.                } else if (var0[var8].equals("-noindex")) {
  115.                   showIndex = false;
  116.                } else if (var0[var8].equals("-notree")) {
  117.                   showTree = false;
  118.                } else if (var0[var8].equals("-d")) {
  119.                   if (var8 + 1 < var0.length) {
  120.                      ++var8;
  121.                      destDir = new File(var0[var8]);
  122.                      if (!destDir.exists()) {
  123.                         error(destDir.getPath() + " does not exist");
  124.                         exit();
  125.                      }
  126.                   } else {
  127.                      error("-d requires argument");
  128.                      usage();
  129.                      exit();
  130.                   }
  131.                } else if (var0[var8].startsWith("-")) {
  132.                   error("invalid flag: " + var0[var8]);
  133.                   usage();
  134.                   exit();
  135.                } else if (var0[var8].endsWith(".java") && var0[var8].indexOf(46) == var0[var8].length() - 5) {
  136.                   var6.addElement(var0[var8]);
  137.                } else {
  138.                   var5.addElement(var0[var8]);
  139.                }
  140.             } else if (var8 + 1 < var0.length) {
  141.                ++var8;
  142.                var1 = var0[var8];
  143.             } else {
  144.                error(var0[var8] + " requires argument");
  145.                usage();
  146.                exit();
  147.             }
  148.          } else {
  149.             showAuthors = true;
  150.          }
  151.       }
  152.  
  153.       if (var5.size() == 0 && var6.size() == 0) {
  154.          error("No packages or classes specified.");
  155.          usage();
  156.          exit();
  157.       }
  158.  
  159.       if (var1 == null) {
  160.          var1 = ".";
  161.       }
  162.  
  163.       ClassPath var9 = new ClassPath(var1);
  164.       env = new BatchEnvironment(var9);
  165.       BatchEnvironment var10000 = env;
  166.       var10000.flags |= var2;
  167.  
  168.       try {
  169.          Class var10 = Class.forName("sun.tools.javadoc." + var7 + "DocumentationGenerator");
  170.          generator = ((DocumentationGenerator)var10.newInstance()).init();
  171.       } catch (Exception var23) {
  172.          System.out.println("Cannot generate " + var7 + " documentation");
  173.          return;
  174.       }
  175.  
  176.       try {
  177.          Enumeration var28 = var6.elements();
  178.  
  179.          while(var28.hasMoreElements()) {
  180.             File var11 = new File((String)var28.nextElement());
  181.  
  182.             try {
  183.                env.parseFile(new ClassFile(var11));
  184.             } catch (IOException var22) {
  185.                env.error(0, "cant.read", var11.getPath());
  186.             }
  187.          }
  188.  
  189.          var6 = new Vector();
  190.          Enumeration var29 = env.getClasses();
  191.  
  192.          while(var29.hasMoreElements()) {
  193.             ClassDeclaration var12 = (ClassDeclaration)var29.nextElement();
  194.             if (var12.isDefined() && var12.getClassDefinition() instanceof SourceClass) {
  195.                var6.addElement(var12.getClassDefinition());
  196.             }
  197.          }
  198.  
  199.          Hashtable var30 = new Hashtable();
  200.          Enumeration var13 = var5.elements();
  201.  
  202.          while(var13.hasMoreElements()) {
  203.             Identifier var14 = Identifier.lookup((String)var13.nextElement());
  204.             Package var15 = new Package(var9, var14);
  205.             System.out.println("Loading source files for " + var14);
  206.             Enumeration var16 = var15.getSourceFiles();
  207.  
  208.             while(var16.hasMoreElements()) {
  209.                ClassFile var17 = (ClassFile)var16.nextElement();
  210.  
  211.                try {
  212.                   env.parseFile(var17);
  213.                } catch (IOException var21) {
  214.                   env.error(0, "cant.read", var17.getPath());
  215.                }
  216.             }
  217.  
  218.             Enumeration var34 = env.getClasses();
  219.  
  220.             while(var34.hasMoreElements()) {
  221.                ClassDeclaration var18 = (ClassDeclaration)var34.nextElement();
  222.                ClassDefinition var19 = var18.getClassDefinition();
  223.                if (var19 != null && var30.get(var18) == null) {
  224.                   for(FieldDefinition var20 = var19.getFirstField(); var20 != null; var20 = var20.getNextField()) {
  225.                      if (var20.isMethod() && var20.getValue() != null) {
  226.                         var20.setValue((Node)null);
  227.                      }
  228.                   }
  229.  
  230.                   var30.put(var18, var18);
  231.                }
  232.             }
  233.          }
  234.  
  235.          generator.genPackagesDocumentation(var5);
  236.          Enumeration var31 = var5.elements();
  237.  
  238.          while(var31.hasMoreElements()) {
  239.             Identifier var32 = Identifier.lookup((String)var31.nextElement());
  240.             generator.genPackageDocumentation(var32);
  241.          }
  242.  
  243.          Enumeration var33 = var6.elements();
  244.  
  245.          while(var33.hasMoreElements()) {
  246.             generator.genClassDocumentation((ClassDefinition)var33.nextElement(), (ClassDeclaration)null, (ClassDeclaration)null);
  247.          }
  248.  
  249.          if (showIndex) {
  250.             System.out.println("Generating index");
  251.             generator.genFieldIndex();
  252.          }
  253.  
  254.          if (showTree) {
  255.             System.out.println("Generating tree");
  256.             generator.genClassTree();
  257.          }
  258.       } catch (Error var24) {
  259.          ((Throwable)var24).printStackTrace();
  260.          env.error(0, "fatal.error");
  261.          env.flushErrors();
  262.          System.exit(1);
  263.       } catch (Exception var25) {
  264.          ((Throwable)var25).printStackTrace();
  265.          env.error(0, "fatal.exception");
  266.          env.flushErrors();
  267.          System.exit(1);
  268.       }
  269.  
  270.       if (env.verbose()) {
  271.          var3 = System.currentTimeMillis() - var3;
  272.          System.out.println("[done in " + var3 + "ms]");
  273.       }
  274.  
  275.       exit();
  276.    }
  277. }
  278.